Hallo,
ich möchte ein Basic Programm ins Atari Basic portieren. Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins Atari Basic übersetzen?
Beispiel:
ASC(MID$(A$,J+1,1)
Das ist mir zu undurchsichtig...
Hallo,
ich möchte ein Basic Programm ins Atari Basic portieren. Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins Atari Basic übersetzen?
Beispiel:
ASC(MID$(A$,J+1,1)
Das ist mir zu undurchsichtig...
Ich denke da benötigen wir etwas mehr Quellcode drumherum und die Info welcher Basic Dialekt der Ursprung ist.
Das j+1 deutet auf eine Schleife hin und das ,1 auf eine gesuchte Länge von einem Zeichen. Aber das kann auch komplett was anderes sein.
PS: Wenn es das ist, könnte man A$(LEN(A$)/2) ansprechen...
PP´s of STARSOFTBerlin____github|meine Webseite|Demozoo
Der Code stammt aus dem BASICODE, einer minimal BASIC-Variante.
Hier etwas mehr Code:
1000 A=50:GOTO20:REM GRAFIKIMPORT AUS ASCII-DATEI
1010 REM STARTBILDSCHIRM
1020 GOSUB100:HO=8:VE=1:GOSUB110:SR$="IMPORT VON GRAFIKEN":GOSUB150
1030 HO=8:VE=2:GOSUB110:SR$=" AUS ASCII-DATEIEN ":GOSUB150
1040 HO=2:VE=6:GOSUB110:PRINT"AUS WELCHER DATEI LADEN";:INPUTB$
2000 REM EINLESEN DER DATEN
2010 NF=4:NF$=B$:GOSUB 500
2020 GOSUB540:PRINTIN$
2030 IF IN$<>"SCREEN"THEN2900
2040 GOSUB540:PRINTIN$
2050 GOSUB540:PRINTIN$:IFIN$<>"H320"THEN2900
2060 GOSUB540:PRINTIN$:IFIN$<>"V200"THEN2900
2070 GOSUB540:PRINTIN$
2080 GOSUB540:PRINTIN$
2890 GOTO20000
2900 PRINT"KEINE PASSENDE DATEI"
3000 GOSUB 580
3010 STOP
20000 REM ERZEUGEN DER GRAFIK
20010 GOSUB 540:C$=IN$
20100 PRINT C$
20110 D$=MID$(C$,1,1)
20120 E=ASC(D$)-64:PRINTE
20130 D$=MID$(C$,2,1)
20140 F=ASC(D$)-64:PRINTF
20150 G=16*E+F:PRINTG:GOSUB210
20160 GOSUB600:POKE41296,255-G:GOSUB210
22000 GOTO3000
Siehe auch:
Ich hatte oben auch noch was ergänzt...
A$/2 könnte bei ungeraden Zahlen Probleme bringen, also noch dort den Integer nehmen.
BASICCODE m8 das imho, wie ich ged8 habe.
PP´s of STARSOFTBerlin____github|meine Webseite|Demozoo
Hier nochmal der Code, in dem das MID$ umgewandelt werden müsste:
1000 A=50:GOTO20:REM GRAFIKIMPORT AUS ASCII-DATEI
1010 REM STARTBILDSCHIRM
1020 GOSUB100:HO=8:VE=1:GOSUB110:SR$="IMPORT VON GRAFIKEN":GOSUB150
1030 HO=8:VE=2:GOSUB110:SR$=" AUS ASCII-DATEIEN ":GOSUB150
1040 HO=2:VE=6:GOSUB110:PRINT"AUS WELCHER DATEI LADEN";:INPUTB$
2000 REM EINLESEN DER DATEN
2010 NF=4:NF$=B$:GOSUB 500
2020 GOSUB540:PRINTIN$
2030 IF IN$<>"SCREEN"THEN2900
2040 GOSUB540:PRINTIN$:Z$=IN$
2050 GOSUB540:PRINTIN$:IFIN$<>"H320"THEN2900
2060 GOSUB540:PRINTIN$:IFIN$<>"V200"THEN2900
2070 GOSUB540:PRINTIN$
2080 GOSUB540:PRINTIN$
2890 GOTO20000
2900 PRINT"KEINE PASSENDE DATEI"
3000 GOSUB 580
3010 REM STOP
20000 REM ERZEUGEN DER GRAFIK
20005 GOSUB600:SR$=Z$:HO=0 :VE=.9:GOSUB650
20010 H=41296:FORL=0TO199
20020 FORK=0TO 1:GOSUB540:A$=IN$
20030 FORJ=0TO38STEP2
20040 M=16*(ASC(MID$(A$,J+1,1))-64)+ASC(MID$(A$,J+2,1))-64:POKE H,M
20050 H=H+1:NEXTJ
20060 NEXTK:NEXTL:GOSUB210
22000 GOTO3000
Das ist für mich leider zu undurchsichtig...
Hallo,
wie wäre es mit
20040 M=16*(ASC(A$(J+1,J+1))-64)+ASC(A$(J+2,J+2))-64:POKE H,M
Ich hab selber nie mit BASIC programmiert aber ein Beispiel aus dem ATARI BASIC Reference Manual deutet darauf hin, daß
STRING(ANFANG,ENDE)
in etwa
MID$(STRING,ANFANG,ANZAHL)
bei ENDE=ANFANG+ANZAHL-1 entspricht.
Gruß, Rene
Der Code:
20040 M=16*(ASC(A$(J+1,J+1))-64)+ASC(A$(J+2,J+2))-64:POKE H,M
funktioniert leider nicht...
Vielleicht hilft es, 'M' an der Stelle mal mit einem Print ausgeben zu lassen. Das läßt dann Rückschlüsse zu, ob es dem erwarteten Wert entspricht. Bzw. A$, A$(J+1,J+2) und M ausgeben und dann so modifizieren, daß es am Ende funktioniert.
Hast du daran gedacht, dass im Atari BASIC alle Strings auf ihre maximal benötigte Länge DIMensioniert werden müssen?
Der Hinweis von rvetter ist für das eigentliche Problem genau richtig.


Ja, an die DIM-Anweisung habe ich gedacht.
Ich suche noch immer einen Ersatz für folgenden Ausdruck:
M=16*(ASC(MID$(A$,J+1,1))
,
also ohne MID$-Anweisung.
Hatte Atari Basic nicht die Angewohnheit, dass String(0) das erste Element war? Dann muss das +1 einfach weg.
PP´s of STARSOFTBerlin____github|meine Webseite|Demozoo
10 DIM A$(20)
20 A$="ABCDEFGHIJ"
30 J=5
40 ? A$(J+1,J+1)
50 M=16*ASC(A$(J+1,J+1))
60 ? M
READY
RUN
F
1120
Siehe Zeile 50
ABBUC-Mitglied aus den 90ern/frühen 2000ern Ex-WAF und Regionalgruppe Thüringen
Andars schrieb: Hallo,
ich möchte ein Basic Programm ins Atari Basic portieren. Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins Atari Basic übersetzen?
Beispiel:
ASC(MID$(A$,J+1,1)Das ist mir zu undurchsichtig...
Die Zeile sieht 1:1 in Atari-BASIC übersetzt so aus:
ASC(A$(J+1, J+1))
und kann auf
ASC(A$(J+1))
gekürzt werden, da es für die umklammernde ASC-Funktion keine Länge des String benötigt. Zur Erklärung: MID$ ist eine in Atari ungebräuchliche Anweisung. J+1 ist die Stelle im String und 1 ist die Länge. In Atari BASIC wäre das von Stelle J+1 bis Stelle (J+1)-1+1. Da man für ASC keine Länge benötigt, weil der ASC-Wert nur einer Stelle, nämlich die ersten, als Wert zurückgegeben wird, kann man J+1 weglassen.
Andars schrieb: Ja, an die DIM-Anweisung habe ich gedacht.
Ich suche noch immer einen Ersatz für folgenden Ausdruck:
M=16*(ASC(MID$(A$,J+1,1)),
also ohne MID$-Anweisung.
M=16*ASC(A$(J+1))
pps schrieb: Hatte Atari Basic nicht die Angewohnheit, dass String(0) das erste Element war? Dann muss das +1 einfach weg.
Nein.
Weitere Äquivalente:
LEFT$(A$, 10) => A$(1, 10)
RIGHT(A$, 10) => A$(10)
http://fujiama.eu https://abbuc.de/~atarixle/ BOSS-X - das Finale: https://abbuc.de/~atarixle/?article=bossxfinaleditionprerelease
Es könnte auch
RIGHT$(A$, 10) => A$(LEN(A$)-10+1)
heißen, je nach BASIC-Dialekt.
http://fujiama.eu https://abbuc.de/~atarixle/ BOSS-X - das Finale: https://abbuc.de/~atarixle/?article=bossxfinaleditionprerelease